// 版权所有2009 Go作者。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package http

// 在IANA注册的HTTP状态代码。
// 见：https:
const (
	StatusContinue           = 100 // RFC 7231，6.2.1 
	StatusSwitchingProtocols = 101 // RFC 7231，6.2.2 
	StatusProcessing         = 102 // RFC 2518，10.1 
	StatusEarlyHints         = 103 // RFC 8297 

	StatusOK                   = 200 // RFC 7231，6.3.1 
	StatusCreated              = 201 // RFC 7231，6.3.2 
	StatusAccepted             = 202 // RFC 7231，6.3.3 
	StatusNonAuthoritativeInfo = 203 // RFC 7231，6.3.4 
	StatusNoContent            = 204 // RFC 7231，6.3.5 
	StatusResetContent         = 205 // RFC 7231，6.3.6 
	StatusPartialContent       = 206 // RFC 7233，4.1 
	StatusMultiStatus          = 207 // RFC 4918，11.1 

	StatusFound             = 302 // RFC 7231，6.4.3 
	StatusSeeOther          = 303 // RFC 7231，6.4.4 
	StatusNotModified       = 304 // RFC 7232，4.1 
	StatusUseProxy          = 305 // RFC 7231，6.4.5 
	_                       = 306 // RFC 7231，6.4.6（未使用）

	StatusPaymentRequired              = 402 // RFC 7231，6.5.2 
	StatusForbidden                    = 403 // RFC 7231，6.5.3 
	StatusNotFound                     = 404 // RFC 7231，6.5.4 
	StatusMethodNotAllowed             = 405 // RFC 7231，6.5.5 
	StatusNotAcceptable                = 406 // RFC 7231，6.5.6 
	StatusLengthRequired               = 411 // RFC 7231、6.5.10 
	StatusPreconditionFailed           = 412 // RFC 7232、4.2 
	StatusRequestEntityTooLarge        = 413 // RFC 7231、6.5.11 
	StatusRequestURITooLong            = 414 // RFC 7231、6.5.12 
	StatusUnsupportedMediaType         = 415 // RFC 7231、6.5.13 
	StatusExpectationFailed            = 417 // RFC 7231、6.5.14 
	StatusUnprocessableEntity          = 422 // RFC 4918，11.2 
	StatusLocked                       = 423 // RFC 4918，11.3 
	StatusFailedDependency             = 424 // RFC 4918，11.4 
	StatusTooEarly                     = 425 // RFC 8470，5.2。
	StatusUpgradeRequired              = 426 // RFC 7231，6.5.15 
	StatusPreconditionRequired         = 428 // RFC 6585，3 
	StatusTooManyRequests              = 429 // RFC 6585，4 
	StatusRequestHeaderFieldsTooLarge  = 431 // RFC 6585，5 
	StatusUnavailableForLegalReasons   = 451 // RFC 7725，3 

	StatusInternalServerError           = 500 // RFC 7231，6.6.1 
	StatusHTTPVersionNotSupported       = 505 // RFC 7231，6.6.6 
	StatusVariantAlsoNegotiates         = 506 // RFC 2295，8.1 
	StatusInsufficientStorage           = 507 // RFC 4918，11.5 
	StatusLoopDetected                  = 508 // RFC 5842，7.2 
	StatusNotExtended                   = 510 // RFC 2774，7 
	StatusNetworkAuthenticationRequired = 511 // RFC 6585，6 
)

var statusText = map[int]string{
	StatusContinue:           "Continue",
	StatusSwitchingProtocols: "Switching Protocols",
	StatusProcessing:         "Processing",
	StatusEarlyHints:         "Early Hints",

	StatusOK:                   "OK",
	StatusCreated:              "Created",
	StatusAccepted:             "Accepted",
	StatusNonAuthoritativeInfo: "Non-Authoritative Information",
	StatusNoContent:            "No Content",
	StatusResetContent:         "Reset Content",
	StatusPartialContent:       "Partial Content",
	StatusMultiStatus:          "Multi-Status",
	StatusAlreadyReported:      "Already Reported",
	StatusIMUsed:               "IM Used",

	StatusMultipleChoices:   "Multiple Choices",
	StatusMovedPermanently:  "Moved Permanently",
	StatusFound:             "Found",
	StatusSeeOther:          "See Other",
	StatusNotModified:       "Not Modified",
	StatusUseProxy:          "Use Proxy",
	StatusTemporaryRedirect: "Temporary Redirect",
	StatusPermanentRedirect: "Permanent Redirect",

	StatusBadRequest:                   "Bad Request",
	StatusUnauthorized:                 "Unauthorized",
	StatusPaymentRequired:              "Payment Required",
	StatusForbidden:                    "Forbidden",
	StatusNotFound:                     "Not Found",
	StatusMethodNotAllowed:             "Method Not Allowed",
	StatusNotAcceptable:                "Not Acceptable",
	StatusProxyAuthRequired:            "Proxy Authentication Required",
	StatusRequestTimeout:               "Request Timeout",
	StatusConflict:                     "Conflict",
	StatusGone:                         "Gone",
	StatusLengthRequired:               "Length Required",
	StatusPreconditionFailed:           "Precondition Failed",
	StatusRequestEntityTooLarge:        "Request Entity Too Large",
	StatusRequestURITooLong:            "Request URI Too Long",
	StatusUnsupportedMediaType:         "Unsupported Media Type",
	StatusRequestedRangeNotSatisfiable: "Requested Range Not Satisfiable",
	StatusExpectationFailed:            "Expectation Failed",
	StatusTeapot:                       "I'm a teapot",
	StatusMisdirectedRequest:           "Misdirected Request",
	StatusUnprocessableEntity:          "Unprocessable Entity",
	StatusLocked:                       "Locked",
	StatusFailedDependency:             "Failed Dependency",
	StatusTooEarly:                     "Too Early",
	StatusUpgradeRequired:              "Upgrade Required",
	StatusPreconditionRequired:         "Precondition Required",
	StatusTooManyRequests:              "Too Many Requests",
	StatusRequestHeaderFieldsTooLarge:  "Request Header Fields Too Large",
	StatusUnavailableForLegalReasons:   "Unavailable For Legal Reasons",

	StatusInternalServerError:           "Internal Server Error",
	StatusNotImplemented:                "Not Implemented",
	StatusBadGateway:                    "Bad Gateway",
	StatusServiceUnavailable:            "Service Unavailable",
	StatusGatewayTimeout:                "Gateway Timeout",
	StatusHTTPVersionNotSupported:       "HTTP Version Not Supported",
	StatusVariantAlsoNegotiates:         "Variant Also Negotiates",
	StatusInsufficientStorage:           "Insufficient Storage",
	StatusLoopDetected:                  "Loop Detected",
	StatusNotExtended:                   "Not Extended",
	StatusNetworkAuthenticationRequired: "Network Authentication Required",
}

// 字符串。
func StatusText(code int) string {
	return statusText[code]
}
